4.4.3. 乘法和除法
本节简要介绍二进制与整数的乘法和除法。特别是,它展示了手动计算结果的方法,并且不反映现代硬件的行为。该描述并不全面,因为本章的其余部分主要关注加法和减法。
乘法
要进行二进制数相乘,请使用常见的纸笔策略,一次考虑一位数字并将结果相加。例如,将 0b0101 (5) 与 0b0011 (3) 相乘相当于求和:
- d0 乘以 0b101 (5) 的结果:0b0101 (5)
- 将 d1 乘以 0b101 (5) 并将结果向左移动一位数的结果:0b1010 (10)。
0101 0101 0101
x 0011 = x 1 + x 10 = 101 + 1010 = 1111 (15)
(整数) 除法
与刚刚描述的其他运算不同,除法有可能产生非整数结果。对整数进行除法时要记住的主要一点是,在大多数语言(例如 C、Python 2 和 Java)中,结果的小数部分会被截断。除此之外,二进制除法使用大多数学生在小学学习的相同长形式方法。例如,计算 11 / 3 会产生整数结果 3:
____
11 |1011
00__ 11 (3) doesn't fit into 1 (1) or 10 (2),
11 |1011 so the first two digits of the result are 00.
001_ 11 (3) fits into 101 (5) once.
11 |1011
101 101 (5) - 11 (3) leaves 10 (2).
- 11
10
0011
11 |1011 11 (3) fits into 101 (5) once again.
101
此时,算术已产生预期的整数结果 0011 (3),并且硬件会截断所有小数部分。如果您有兴趣确定积分余数,请使用模运算符 (%);例如,11%3=2。